Reference
  Area\Util.txt
  Util\Audio.txt
  Util\Party.txt
  Util\CommonDialog.txt
End Reference

Procedure Main(startAt)

  Dim ac = Nothing

  RegisterCommonEventHandlers()
  AddAreaZone(AddZone("F1",  0, 0, 0, 63, 63, 100), 2)
  AddAreaZone(AddZone("F2", 64, 0, 0, 95, 31, 100), 8)
  
  AddZone("ExitArea", 30, 63, 0, 33, 63, 0)
  RegisterEventHandler("ExitAreaEnter", ExitArea_Enter)
  AddZone("Entrance", 31, 62, 0)

  AddZone("F1_US1", 31, 40, 0)
  RegisterEventHandler("F1_US1Enter", F1_US1_Enter)

  AddZone("F2_DS1", 79, 24, 0)
  RegisterEventHandler("F2_DS1Enter", F2_DS1_Enter)
  
  DoInsideWarp(startAt, Direction.Up, False)
  
  If TestFlag("WestEvo") AndAlso Not TestFlag("Medrod_1") Then
    ac = AddActor_MTStopped("EnemyA", 79, 3, 0, [A_EnemyA], ActorMotion.Down, EnemyA_Contact)
    If TestFlag("Munalo_1") Then
      SetStepsOfMaterial(4, 20)
    Else
      SetStepsOfMaterial(4, 40)
    End If
    ResetStepsForEncountering()
    AddZone("EncZone01", 0, 0, 0, 63, 63, 0)
    RegisterEventHandler("EncZone01Step", EncZone01_Step)
    ChangeBGM(Music.Tower)
  Else
    ac = AddActor_MTStopped("King", 79, 3, 0, [A_Father], ActorMotion.Down, King_Contact)
    ac = AddActor_MTStopped("GuardMan1", 77, 5, 0, [A_Soldier], ActorMotion.Down, GuardMan1_Contact)
    ac = AddActor_MTStopped("GuardMan2", 82, 5, 0, [A_Soldier], ActorMotion.Down, GuardMan2_Contact)
    
    If TestFlag("WestEvo") Then
      ac = AddActor_MTStopped("GuardMan3", 77, 20, 0, [A_Soldier], ActorMotion.Right, GuardMan3_Contact)
      ac = AddActor_MTStopped("GuardMan4", 82, 20, 0, [A_Soldier], ActorMotion.Left, GuardMan4_Contact)
    Else
      ac = AddActor_MTStopped("GuardMan5", 31, 41, 0, [A_Soldier], ActorMotion.Down, GuardMan5_Contact)
      ac = AddActor_MTStopped("GuardMan6", 32, 41, 0, [A_Soldier], ActorMotion.Down, GuardMan6_Contact)
    End If
    
    ac = AddActor_MTZonedRandom("Worker1", 5, 5, 0, _
      2, 2, 0, 8, 8, 0, [A_Soldier], Worker1_Contact)
    
    ac = AddActor_MTZonedRandom("Worker2", 5, 25, 0, _
      2, 22, 0, 8, 28, 0, [A_Soldier], Worker2_Contact)
    
    ac = AddActor_MTZonedRandom("Worker3", 5, 37, 0, _
      2, 34, 0, 8, 40, 0, [A_Soldier], Worker3_Contact)
    
    ac = AddActor_MTZonedRandom("Worker4", 31, 58, 0, _
      29, 56, 0, 33, 60, 0, [A_Soldier], Worker4_Contact)
      
    ChangeBGM(Music.Castle)
  End If
  
  PutAreaNameLabel()

  NotifyEntered()
  Idle(ProcessInput)
  NotifyExiting()

End Procedure

Procedure ExitArea_Enter()
  BeginOutsideWarp([Field], GetAreaObject().Tag)
End Procedure

Procedure F1_US1_Enter()
  DoStairWarp("F2_DS1", Direction.Down, True)
End Procedure

Procedure F2_DS1_Enter()
  DoStairWarp("F1_US1", Direction.Down, True)
End Procedure

Procedure EncZone01_Step(mat)
  If TestEncountering(mat) Then
    Dim ep = CreateList()
    ep.Add({[E027], [E027]})
    ep.Add({[E118], [E118]})
    ep.Add({[E205], [E205], [E205]})
    ep.Add({[E205], [E206]})
    ep.Add({[E205], [E205], [E206]})
    ep.Add({[E206], [E206]})
    DoNormalBattle(ep)
    ResetStepsForEncountering()
  End If
End Procedure

Procedure EnemyA_Contact()
  Dim p_name = [TheHero].Name + "："
  Dim q_name = "アフリエムの手下："
  ChangeBGM(Nothing)
  Sleep(500)
  ChangeBGM(Music.Duel)
  DoMsg(p_name, "お前がこいつらの首領か")
  DoMsg(q_name, "そのとおり　アフリエム様は", _
    "この国を今すぐ滅ぼせとご命令になった", _
    "よって手始めに　この城を占拠したのだ", _
    "次は南の町だな")
  DoMsg(p_name, "そうはさせないぞ", _
    "今すぐこの城から手を引け")
  DoMsg(q_name, "なに？……あ　貴様！", _
    "もしやアフリエム様が仰っていた", _
    [TheHero].Name + "というやつか！", _
    "ちょうどいい　俺がこの場で殺してやる！")
  If Not DoBossBattle({[E210]}) Then
    EndOfTheWorld()
    Return
  End If
  DoMsg(q_name, "つ　強い……", _
    "俺の　かなう相手では　なかった……", _
    "ぐほっ")
  RemoveActor(EnemyA)
  Sleep(1000)
  SetFlag("Medrod_1")
  BeginOutsideWarp([Medrod], GetAreaObject().Tag)
End Procedure

Procedure King_Contact()
  Dim p_name = [TheHero].Name + "："
  Dim q_name = "国王："
  If TestFlag("Medrod_2") Then
    DoMsg(q_name, "全てが終わったら　来てくれないか？", _
      "待っているぞ")
  Else
    DoMsg(q_name, "おかげで城を取り戻すことができた", _
      [TheHero].Name + "　心より感謝するぞ")
    DoMsg(q_name, "この国で手に入る最強の武器防具一式を", _
      "褒美にやろう　受け取れ")
    DoMsg(p_name, "有り難く頂戴いたします")
    GiveUsTool([SonicBoom])
    GiveUsTool([ZirconArmor])
    GiveUsTool([ZirconShield])
    GiveUsTool([ZirconHelmet])
    Sleep(1000)
    DoMsg(q_name, "ところで……", _
      "アドルニアに落ち着くつもりはないか？", _
      "これからもその力を貸してほしいのだ")
    DoMsg(p_name, "陛下　すみませんが", _
      "私にはまだ行かねばならない所があるので……")  
    DoMsg(q_name, "そうか……では全てが終わったら", _
      "来てくれないか？　待っているぞ")
    SetFlag("Medrod_2")
  End If
End Procedure

Procedure GuardMan1_Contact()
  DoMsg("私の見立てに間違いはなかったな")
End Procedure

Procedure GuardMan2_Contact()
  DoMsg("これからも陛下をお守りするのが我が役目")
End Procedure

Procedure GuardMan3_Contact()
  DoMsg("この先は玉座の間である")
End Procedure

Procedure GuardMan4_Contact()
  DoMsg("陛下に失礼のないようにな")
End Procedure

Procedure GuardMan5_Contact()
  DoMsg("この城の者ではないな？")
End Procedure

Procedure GuardMan6_Contact()
  DoMsg("上の階に通すわけにはいかない")
End Procedure

Procedure Worker1_Contact()
  DoMsg("西の塔に行くそうだな", _
    "役に立つかどうか分からんが", _
    "こんな言い伝えを聞いたことがある", _
    "", _
    "前進せんとする者", _
    "　柱の上を歩くべし", _
    "　　暗き床を照らすべし……", _
    "", _
    "というものだ", _
    "何の事だか俺には分からないが")
End Procedure

Procedure Worker2_Contact()
  DoMsg("ずっと北にホロイラという村がある", _
    "その近くの谷を抜ければ北方自治区だ", _
    "自治区ではその高度な技術を生かして", _
    "強力な武器や魔法が売られていると聞く")
End Procedure

Procedure Worker3_Contact()
  DoMsg("北に行けばピネマ鉱山と", _
    "その労働者たちの町があるぞ")
End Procedure

Procedure Worker4_Contact()
  If TestFlag("Medrod_1") Then
    DoMsg("もはや　この城の兵で", _
      "お前を知らぬ者はおるまい")
  Else
    DoMsg("見かけない顔だな")
  End If
End Procedure
